#include <websocketpp/config/asio_no_tls.hpp>
#include <websocketpp/server.hpp>
//1.定义server类型
typedef websocketpp::server<websocketpp::config::asio> server_t;
void onOpen(websocketpp::connection_hdl hdl)
{
    std::cout<<"websocket长连接建立成功\n";
}

void onMessage(server_t* server,websocketpp::connection_hdl hdl,server_t::message_ptr msg)
{
    //1.获取消息的有效载荷，并进行业务处理
    std::string body = msg->get_payload();
    std::cout<<"收到消息:"<<body<<std::endl;
    //2.对客户端进行响应
    //获取通信连接
    auto conn = server->get_con_from_hdl(hdl);
    //发送数据
    conn->send(body+"--服务器处理标签认证",websocketpp::frame::opcode::value::text);
}

void onClose(websocketpp::connection_hdl hdl)
{
    std::cout << "websocket长连接断开\n";
}


int main()
{
    //2.实例化服务器对象
    server_t server;
    //3.初始化日志输出 -- 关闭日志输出
    server.set_access_channels(websocketpp::log::alevel::none);
    //4.初始化asio框架
    server.init_asio();
    //5.设置连接握手成功/消息处理/连接关闭的回调函数
    server.set_open_handler(onOpen);
    server.set_message_handler(std::bind(onMessage,&server,std::placeholders::_1,std::placeholders::_2));
    server.set_close_handler(onClose);
    //6.启用地址复用
    server.set_reuse_addr(true);
    //7.设置监听端口
    server.listen(9090);
    //8.开始监听
    server.start_accept();
    //9.启动服务器
    server.run();
    return 0;
};